<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Benchmarks</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../index.html" title="Chapter 1. Boost.JSON">
<link rel="up" href="../index.html" title="Chapter 1. Boost.JSON">
<link rel="prev" href="frequently_asked_questions.html" title="Frequently Asked Questions">
<link rel="next" href="comparison.html" title="Comparison to Other Libraries">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="frequently_asked_questions.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="comparison.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="json.benchmarks"></a><a class="link" href="benchmarks.html" title="Benchmarks">Benchmarks</a>
</h2></div></div></div>
<p>
      This section compares the performance of Boost.JSON with two widely used libraries
      with similar functionality: RapidJSON which is known for its performance, and
      JSON for Modern C++ which is known for feature-richness. The bench program
      measures the throughput of parsing and serialization for the a set of JSON
      representing typical workloads. These implementations are evaluated:
    </p>
<div class="table">
<a name="json.benchmarks.implementations"></a><p class="title"><b>Table 1.10. Implementations</b></p>
<div class="table-contents"><table class="table" summary="Implementations">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
              <p>
                Name
              </p>
            </th>
<th>
              <p>
                Description
              </p>
            </th>
</tr></thead>
<tbody>
<tr>
<td>
              <p>
                <span class="bold"><strong>boost(pool)</strong></span>
              </p>
            </td>
<td>
              <p>
                Parses the input using a <a class="link" href="ref/boost__json__monotonic_resource.html" title="monotonic_resource"><code class="computeroutput"><span class="identifier">monotonic_resource</span></code></a>, which
                is optimized for parsing without subsequent modification. The <a class="link" href="ref/boost__json__stream_parser.html" title="stream_parser"><code class="computeroutput"><span class="identifier">stream_parser</span></code></a>
                object is reused between trials, allowing temporary memory allocated
                by the implementation to persist and improve performance.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <span class="bold"><strong>boost</strong></span>
              </p>
            </td>
<td>
              <p>
                Parses the input using the default memory resource, which uses the
                standard C++ allocator, and is designed for general use including
                mutation of the document after it is parsed. The <a class="link" href="ref/boost__json__stream_parser.html" title="stream_parser"><code class="computeroutput"><span class="identifier">stream_parser</span></code></a> object is
                reused between trials, allowing temporary memory allocated by the
                implementation to persist and improve performance.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <span class="bold"><strong>rapidjson(pool)</strong></span>
              </p>
            </td>
<td>
              <p>
                Parses the input using an instance of <a href="https://rapidjson.org/classrapidjson_1_1_memory_pool_allocator.html" target="_top"><code class="computeroutput"><span class="identifier">MemoryPoolAllocator</span></code></a>, which
                is optimized for parsing without subsequent modification. The <a href="https://rapidjson.org/classrapidjson_1_1_generic_document.html" target="_top"><code class="computeroutput"><span class="identifier">Document</span></code></a> object holding
                temporary memory is not reused between trials, otherwise memory consumption
                grows without bounds and invalidates the benchmark.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <span class="bold"><strong>rapidjson</strong></span>
              </p>
            </td>
<td>
              <p>
                Parses the input using an instance of <a href="https://rapidjson.org/classrapidjson_1_1_crt_allocator.html" target="_top"><code class="computeroutput"><span class="identifier">CrtAllocator</span></code></a>, which uses
                the standard C++ allocator, and is designed for general use including
                mutation of the document after it is parsed. The <a href="https://rapidjson.org/classrapidjson_1_1_generic_document.html" target="_top"><code class="computeroutput"><span class="identifier">Document</span></code></a> object holding
                temporary memory is not reused between trials, otherwise memory consumption
                grows without bounds and invalidates the benchmark.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <span class="bold"><strong>nlohmann</strong></span>
              </p>
            </td>
<td>
              <p>
                Parses the input using the static member function <a href="https://nlohmann.github.io/json/classnlohmann_1_1basic__json_ab330c13ba254ea41fbc1c52c5c610f45.html" target="_top"><code class="computeroutput"><span class="identifier">json</span><span class="special">::</span><span class="identifier">parse</span></code></a>, which uses the default
                <code class="computeroutput"><span class="identifier">std</span></code> allocator, and
                is designed for general use including mutation of the document after
                it is parsed. This library does not provide an interface to reuse
                temporary storage used during parsing or serialization on subsequent
                operations.
              </p>
            </td>
</tr>
</tbody>
</table></div>
</div>
<br class="table-break"><h4>
<a name="json.benchmarks.h0"></a>
      <span class="phrase"><a name="json.benchmarks.methodology"></a></span><a class="link" href="benchmarks.html#json.benchmarks.methodology">Methodology</a>
    </h4>
<p>
      The input files are all loaded first. Then each configuration is run for a
      sufficient number of trials to last at least 5 seconds. The elapsed time, number
      of invocations (of parse or serialize), and bytes transferred are emitted as
      a sample along with a calculation of throughput expressed in megabytes per
      second. Several samples (currently five) are generated for each configuration.
      All but the median two samples are discarded, with the remaining samples averaged
      to produce a single number which is reported as the benchmark result.
    </p>
<p>
      The input files, available in the bench/data directory, are laid out thusly:
    </p>
<div class="table">
<a name="json.benchmarks.input_files"></a><p class="title"><b>Table 1.11. Input Files</b></p>
<div class="table-contents"><table class="table" summary="Input Files">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead><tr>
<th>
              <p>
                Name
              </p>
            </th>
<th>
              <p>
                Size
              </p>
            </th>
<th>
              <p>
                Description
              </p>
            </th>
</tr></thead>
<tbody>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_apache_builds_json"><span class="bold"><strong>apache_builds.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                125KB
              </p>
            </td>
<td>
              <p>
                Data from the Apache Jenkins installation.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_canada_json"><span class="bold"><strong>canada.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                2.2MB
              </p>
            </td>
<td>
              <p>
                The largest file, containing a large number of 2-element arrays holding
                floating-point coordinate pairs.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_citm_catalog_json"><span class="bold"><strong>citm_catalog.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                1.69MB
              </p>
            </td>
<td>
              <p>
                A large JSON with a variety of nesting, types, and lengths.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_github_events_json"><span class="bold"><strong>github_events.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                64KB
              </p>
            </td>
<td>
              <p>
                An export of data from the Github Events API.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_gsoc_2018_json"><span class="bold"><strong>gsoc-2018.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                3.25MB
              </p>
            </td>
<td>
              <p>
                Google Summer of Code 2018 data.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_instruments_json"><span class="bold"><strong>instruments.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                216KB
              </p>
            </td>
<td>
              <p>
                An array of large objects.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_marine_ik_json"><span class="bold"><strong>marine_ik.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                2.91MB
              </p>
            </td>
<td>
              <p>
                A three.js example model serialized to JSON.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_mesh_json"><span class="bold"><strong>mesh.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                707KB
              </p>
            </td>
<td>
              <p>
                A JSON representing a 3D mesh. Contains many floating-point numbers.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_mesh_pretty_json"><span class="bold"><strong>mesh.pretty.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                1.54MB
              </p>
            </td>
<td>
              <p>
                mesh.json with whitespace added.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_numbers_json"><span class="bold"><strong>numbers.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                147KB
              </p>
            </td>
<td>
              <p>
                A array containing only floating-point numbers.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_random_json"><span class="bold"><strong>random.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                499KB
              </p>
            </td>
<td>
              <p>
                A JSON with lots of Cyrillic characters.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_twitter_json"><span class="bold"><strong>twitter.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                617KB
              </p>
            </td>
<td>
              <p>
                An export of data from Twitter's API.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_twitterescaped_json"><span class="bold"><strong>twitterescaped.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                550KB
              </p>
            </td>
<td>
              <p>
                twitter.json with whitespace removed and non-ASCII characters replaced
                with Unicode escapes.
              </p>
            </td>
</tr>
<tr>
<td>
              <p>
                <a class="link" href="benchmarks.html#json.benchmarks.parse_update_center_json"><span class="bold"><strong>update-center.json</strong></span></a>
              </p>
            </td>
<td>
              <p>
                521KB
              </p>
            </td>
<td>
              <p>
                An export of data from Twitter's API.
              </p>
            </td>
</tr>
</tbody>
</table></div>
</div>
<br class="table-break"><p>
      Hardware used for testing: <span class="bold"><strong>Intel(R) Core(TM) i7-7700K
      CPU @ 4.20GHz</strong></span>, Windows 10, 32GB RAM.
    </p>
<p>
      Compilers and optimization flags: gcc 8.1 (-O3), clang 12.0 (-O3), and msvc
      19.26 (/O2).
    </p>
<h4>
<a name="json.benchmarks.h1"></a>
      <span class="phrase"><a name="json.benchmarks.parse_apache_builds_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_apache_builds_json">Parse
      apache_builds.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_apache_builds.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h2"></a>
      <span class="phrase"><a name="json.benchmarks.parse_canada_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_canada_json">Parse
      canada.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_canada.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h3"></a>
      <span class="phrase"><a name="json.benchmarks.parse_citm_catalog_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_citm_catalog_json">Parse
      citm_catalog.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_citm_catalog.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h4"></a>
      <span class="phrase"><a name="json.benchmarks.parse_github_events_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_github_events_json">Parse
      github_events.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_github_events.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h5"></a>
      <span class="phrase"><a name="json.benchmarks.parse_gsoc_2018_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_gsoc_2018_json">Parse
      gsoc-2018.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_gsoc_2018.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h6"></a>
      <span class="phrase"><a name="json.benchmarks.parse_instruments_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_instruments_json">Parse
      instruments.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_instruments.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h7"></a>
      <span class="phrase"><a name="json.benchmarks.parse_marine_ik_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_marine_ik_json">Parse
      marine_ik.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_marine_ik.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h8"></a>
      <span class="phrase"><a name="json.benchmarks.parse_mesh_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_mesh_json">Parse
      mesh.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_mesh.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h9"></a>
      <span class="phrase"><a name="json.benchmarks.parse_mesh_pretty_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_mesh_pretty_json">Parse
      mesh.pretty.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_mesh_pretty.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h10"></a>
      <span class="phrase"><a name="json.benchmarks.parse_numbers_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_numbers_json">Parse
      numbers.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_numbers.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h11"></a>
      <span class="phrase"><a name="json.benchmarks.parse_random_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_random_json">Parse
      random.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_random.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h12"></a>
      <span class="phrase"><a name="json.benchmarks.parse_twitter_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_twitter_json">Parse
      twitter.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_twitter.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h13"></a>
      <span class="phrase"><a name="json.benchmarks.parse_twitterescaped_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_twitterescaped_json">Parse
      twitterescaped.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_twitterescaped.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h14"></a>
      <span class="phrase"><a name="json.benchmarks.parse_update_center_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_update_center_json">Parse
      update-center.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_update_center.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h15"></a>
      <span class="phrase"><a name="json.benchmarks.parse_apache_builds_json0"></a></span><a class="link" href="benchmarks.html#json.benchmarks.parse_apache_builds_json0">Parse
      apache_builds.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/parse_apache_builds.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h16"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_canada_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_canada_json">Serialize
      canada.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_canada.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h17"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_citm_catalog_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_citm_catalog_json">Serialize
      citm_catalog.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_citm_catalog.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h18"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_github_events_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_github_events_json">Serialize
      github_events.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_github_events.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h19"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_gsoc_2018_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_gsoc_2018_json">Serialize
      gsoc-2018.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_gsoc_2018.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h20"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_instruments_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_instruments_json">Serialize
      instruments.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_instruments.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h21"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_marine_ik_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_marine_ik_json">Serialize
      marine_ik.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_marine_ik.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h22"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_mesh_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_mesh_json">Serialize
      mesh.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_mesh.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h23"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_mesh_pretty_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_mesh_pretty_json">Serialize
      mesh.pretty.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_mesh_pretty.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h24"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_numbers_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_numbers_json">Serialize
      numbers.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_numbers.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h25"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_random_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_random_json">Serialize
      random.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_random.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h26"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_twitter_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_twitter_json">Serialize
      twitter.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_twitter.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h27"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_twitterescaped_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_twitterescaped_json">Serialize
      twitterescaped.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_twitterescaped.png" width="668"></span>
    </p>
<h4>
<a name="json.benchmarks.h28"></a>
      <span class="phrase"><a name="json.benchmarks.serialize_update_center_json"></a></span><a class="link" href="benchmarks.html#json.benchmarks.serialize_update_center_json">Serialize
      update-center.json</a>
    </h4>
<p>
      <span class="inlinemediaobject"><img src="images/serialize_update_center.png" width="668"></span>
    </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2019, 2020 Vinnie Falco<br>Copyright © 2020 Krystian Stasiowski<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="frequently_asked_questions.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="comparison.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
